package main

import (
	"fmt"
	"github.com/garyburd/redigo/redis"
)

func testSet(conn redis.Conn) {

	//通过go 向redis写入数据 string[key-val]
	reply, err := conn.Do("set", "name", "xiao li")
	if err != nil {
		fmt.Printf("conn.Do err : %v \n", err)
	}
	fmt.Printf("set result : %v \n", reply)

	reply, err = redis.String(conn.Do("get", "name"))
	if err != nil {
		fmt.Printf("conn.Do err : %v \n", err)
	}
	fmt.Printf("set result : %v \n", reply)
}

func testHset(conn redis.Conn) {

	setHset(conn, "user01", "age", 18)
	setHset(conn, "user01", "name", "小明")
	setHset(conn, "user01", "addr", "北京市")

	result := getHset(conn, "user01", "age")
	fmt.Printf("result =%v \n", result)
	result = getHset(conn, "user01", "name")
	fmt.Printf("result =%v \n", result)
	result = getHset(conn, "user01", "addr")
	fmt.Printf("result =%v \n", result)

}

func setHset(conn redis.Conn, name, key string, value interface{}) {
	_, err := conn.Do("HSet", name, key, value)
	if err != nil {
		fmt.Printf("setHset err : %v \n", err)
	}
}

func getHset(conn redis.Conn, name, key string) interface{} {
	reply, err := redis.String(conn.Do("HGet", name, key))
	if err != nil {
		fmt.Printf("getHset err : %v \n", err)
	}
	return reply
}

func connect() redis.Conn {
	conn, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("Connect to redis error", err)
		return nil
	}

	fmt.Printf("C : %T \n", conn)

	return conn
}

func setHMSet(conn redis.Conn, args ...interface{}) {
	_, err := conn.Do("HMSet", "user02", "name", "john", "age", 18, "addr", "纽约市")
	if err != nil {
		fmt.Printf("setHMSet err : %v \n", err)
	}
}

func getHMSet(conn redis.Conn, args ...interface{}) interface{} {

	reply, err := redis.Strings(conn.Do("HMGet", "user02", "name", "age", "addr"))
	if err != nil {
		fmt.Printf("getHset err : %v \n", err)
	}
	return reply

}

func testHMSet(conn redis.Conn) {
	setHMSet(conn)
	reply := getHMSet(conn)
	fmt.Printf("reply = %v \n", reply)

}

func main() {
	//链接redis
	conn := connect()
	//关闭资源
	defer conn.Close()

	//testSet(conn)
	//testHset(conn)
	testHMSet(conn)
}
